package com.wing.platform.order.model.response;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.enums.IEnum;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.wing.mybatis.common.BaseEntity;
import com.wing.platform.cabinet.Supplier;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.apache.commons.lang.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 配送
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("ord_order_delivery")
public class OrderDelivery extends BaseEntity<OrderDelivery> implements Serializable {

    private static final long serialVersionUID = 1L;

    public enum Status implements IEnum<Integer> {

        /**
         * 已创建/待认领
         */
        created(0,"已创建/待认领"),
        /**
         * 已认领
         */
        claim(1,"已认领"),
        /**
         * 已领货
         */
        receive(2,"已领货"),
        /**
         * 配送中
         */
        doing(3,"配送中"),
        /**
         * 部分签收
         */
        signPart(4,"部分签收"),
        /**
         * 已签收
         */
        sign(5,"已签收"),
        /**
         * 已上货
         */
        finish(6,"已上货"),
        /**
         * 已入库
         */
        inStorage(7,"已入库");


        private int code;
        private String desc;

        Status(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
        @JsonCreator
        public static OrderDelivery.Status jsonCreator(String name) {
            if (StringUtils.isNotBlank(name)) {
                for (OrderDelivery.Status item : values()) {
                    if (item.name().equals(name.trim())) {
                        return item;
                    }
                }
            }
            return null;
        }
    }
    /**
     * 状态描述
     */
    @TableField(exist = false)
    private String statusDesc;

    public String getStatusDesc() {
        if (status==null){
            return null;
        }else{
            Status status= Status.jsonCreator(this.status.toString());
            if (status==null){
                return null;
            }else{
                return status.getDesc();
            }
        }
    }

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 客户名称
     */
    private String customerName;

    /**
     * 客户联系人
     */
    private String customerConcat;

    /**
     * 联系人电话
     */
    private String customerMoble;

    /**
     * 刀具补货数量
     */
    private Long addNum;

    /**
     * 刀柜SKU库存数量
     */
    private Long stockNum;

    /**
     * 货值
     */
    private BigDecimal total;

    /**
     * 企业id
     */
    private Long enterpriseId;

    /**
     * 省
     */
    private Long province;

    /**
     * 市
     */
    private Long city;

    /**
     * 区
     */
    private Long area;

    /**
     * 详情地址
     */
    private String address;

    /**
     * 确认时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime confirmTime;

    /**
     * 仓库id
     */
    private Long warhouseId;

    /**
     * 配货订单id
     */
    private Long distId;

    /**
     * 品牌
     */
    private String brandName;

    /**
     * 商品单位名称
     */
    private String unitName;

    /**
     * 车间名称
     */
    private String workshopName;

    /**
     * 商品单位id
     */
    private Long unitId;

    /**
     * 车间id
     */
    private Long workshopId;

    /**
     * 领货单id
     */
    private Long receiveId;

    /**
     * 刀柜数量
     */
    private Long cabNum;

    /**
     * 签收时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime signTime;

    /**
     * 签收人
     */
    private String signer;

    /**
     * 签收记录编号
     */
    private String signCode;

    /**
     * 序号
     */
    private Integer no;

    /**
     * 日期
     */
    private Integer day;

    /**
     * 配送单编号
     */
    private String deliveryOrderCode;

    /**
     * 所属企业
     */
    private String companyName;

    /**
     * 配货数量
     */
    private Integer quantityNum;

    /**
     * 配货价值
     */
    private String distributionValue;

    /**
     * 配货员电话
     */
    private String distributionClerkPhone;

    /**
     * 配货员
     */
    private String distributionClerk;

    /**
     * 制单时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime preparationTime;

    /**
     * 出发时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime departureTime;


    /**
     * 认领时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime claimTime;

    /**
     * 配送单Id
     */
    private Integer singleId;

    /**
     * 所属服务商
     */
    private String facilitator;

    /**
     * 提交时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime submitTime;

    /**
     * 配送sku数
     */
    private String deliveryTaskSukNum;

    /**
     * 产品编号
     */
    private String productCode;

    /**
     * 产品名称
     */
    private String productName;

    /**
     * 单位
     */
    private String units;

    /**
     * 配送数量
     */
    private Integer deliveryTaskNum;

    /**
     * 补货数
     */
    private Integer supplyNum;

    /**
     * 签收数
     */
    private Integer receiptNum;

    /**
     * 签收货值
     */
    private String signValue;

    /**
     * 所属配货订单
     */
    private String distributionOrder;

    /**
     * 单价
     */
    private Double price;



    /**
     * 用户名
     */
    private String username;

    /**
     * 产品图片
     */
    private String productImg;

    /**
     * 产品类型
     */
    private String productType;

    /**
     * 状态
     */
    private Object status;




}
